
package com.tencent.weibo.api
{
	import com.tencent.weibo.log.LevelLogger;
	import com.tencent.weibo.operation.IRequestOperation;
	import com.tencent.weibo.operation.URLRequestOperation;
	
	import flash.events.IEventDispatcher;
	
	import mx.logging.ILogger;

	/**
	 * 时间线相关的数据调用的API
	 * @langversion 3.0
	 * @playerversion Flash 9
	 * @playerversion AIR 1.1
	 *
	 */
	public class Timeline extends AbstractAPI
	{
		/**
		 * 日志输出对象
		 */
		public static var logger:ILogger=LevelLogger.getLogger("com.tencent.weibo.api.Timeline");

		/**
		 * 1.获取首页时间线数据
		 * @param pageflag 分页标识（0：第一页，1：向下翻页，2向上翻页）
		 * @param pagetime 本页起始时间（第一页 时填0，继续翻页：填上一次请求返回的最后一条记录时间）
		 * @param reqnum 每次请求记录的条数（1-70条）
		 * @param type 拉取类型, 0x1 原创发表  0x2 转载 0x8 回复  0x10 空回 0x20  提及 0x40 点评如需拉取多个类型请|上(0x1|0x2) 得到3，type=3即可,填零表示拉取所有类型
		 * @param contenttype 内容过滤 填零表示所有类型 1-带文本 2-带链接 4图片 8-带视频 0x10-带音频
		 * @return IRequestOperation实例
		 */
		public function homeTimeline(pageflag:int=0, pagetime:int=0, reqnum:int=20, type:int=0, contenttype:int=0):IRequestOperation
		{
			checkAccessToken();
			var url:String=config.urlBase + "statuses/home_timeline";
			var attachParms:Object={};
			attachParms.pageflag=pageflag;
			attachParms.pagetime=pagetime;
			attachParms.reqnum=reqnum;
			attachParms.type=type;
			attachParms.contenttype=contenttype;
			return generateDataRequest(url, attachParms, config.requestMethod);
		}

		/**
		 * 2.获取广播大厅时间线
		 * @param pos 记录的起始位置（第一次请求是填0，继续请求填上次返回的pos）
		 * @param reqnum 每次请求记录的条数（1-100条）
		 * @return IRequestOperation实例
		 *
		 */
		public function publicTimeline(pos:int=0, reqnum:int=20):IRequestOperation
		{
			checkAccessToken();
			var url:String=config.urlBase + "statuses/public_timeline";
			var attachParms:Object={};
			attachParms.pos=pos;
			attachParms.reqnum=reqnum;
			return generateDataRequest(url, attachParms, config.requestMethod);
		}
		/**
		 * 3.获取其他用户发表时间线
		 * @param name 你需要读取的用户的用户名（可选）
		 * @param fopenid 你需要读取的用户的openid（可选）name和fopenid至少选一个，若同时存在则以name值为主
		 * @param pageflag 分页标识（0：第一页，1：向下翻页，2向上翻页）
		 * @param pagetime 本页起始时间（第一页时填0，继续翻页：填上一次请求返回的最后一条记录时间)
		 * @param reqnum 每次请求记录的条数（1-100条）
		 * @param lastid 第一页时填0,继续向下翻页，填上一次请求返回的最后一条记录id，翻页用
		 * @param type 拉取类型, 0x1 原创发表 0x2 转载 0x8 回复 0x10 空回 0x20 提及 0x40 点评 如需拉取多个类型请|上(0x1|0x2) 得到3，type=3即可,填零表示拉取所有类型
		 * @param contenttype 内容过滤 填零表示所有类型 1-带文本2-带链接4图片8-带视频0x10-带音频
		 * @return IRequestOperation实例
		 * 
		 */
		public function userTimeline(name:String=null, fopenid:String=null, pageflag:int=0, pagetime:int=0, reqnum:int=20, lastid:String="0", type:int=0, contenttype:int=0):IRequestOperation
		{
			checkAccessToken();
			var url:String=config.urlBase + "statuses/user_timeline";
			var attachParms:Object={};
			attachParms.pageflag=pageflag;
			attachParms.pagetime=pagetime;
			attachParms.reqnum=reqnum;
			attachParms.lastid=lastid;
			if(name != null)
				attachParms.name=name;
			if(fopenid != null)
				attachParms.fopenid=fopenid;
			attachParms.type=type;
			attachParms.contenttype=contenttype;
			return generateDataRequest(url, attachParms, config.requestMethod);
		}
		/**
		 * 4.获取用户提及时间线
		 * @param pageflag 分页标识（0：第一页，1：向下翻页，2向上翻页）
		 * @param pagetime 本页起始时间（第一页时填0，继续向下翻页：填上一次请求返回的最后一条记录时间）
		 * @param reqnum 每次请求记录的条数（1-100条）
		 * @param lastid 第一页时填0,继续向下翻页，填上一次请求返回的最后一条记录id，翻页用
		 * @param type 拉取类型, 0x1 原创发表 0x2 转载 0x8 回复 0x10 空回 0x20 提及 0x40 点评 如需拉取多个类型请|上(0x1|0x2) 得到3，type=3即可,填零表示拉取所有类型
		 * @param contenttype 内容过滤 填零表示所有类型 1-带文本2-带链接4图片8-带视频0x10-带音频
		 * @return IRequestOperation实例
		 * 
		 */		
		public function mentionsTimeline(pageflag:int=0,pagetime:int=0,reqnum:int=20,lastid:String="0",type:int=0,contenttype:int=0):IRequestOperation
		{
			checkAccessToken();
			var url:String = config.urlBase+"statuses/mentions_timeline";
			var attachParms:Object = {};
			attachParms.pageflag = pageflag;
			attachParms.pagetime = pagetime;
			attachParms.reqnum = reqnum;
			attachParms.lastid = lastid;
			attachParms.type = type;
			attachParms.contenttype = contenttype;
			return generateDataRequest(url,attachParms,config.requestMethod);
		}
		/**
		 * 5.获取话题时间线 - 建议使用新话题时间线接口ht_timeline_ext
		 * @param httext 话题名字
		 * @param pageflag 分页标识（pageflag = 1表示向后（下一页）查找； pageflag = 2表示向前（上一页）查找；pageflag = 4表示跳到最前一页）
		 * @param pageinfo 分页标识（第一页填空，继续翻页：填上次返回的pageinfo）
		 * @param reqnum 每次请求记录的条数（1-100条）
		 * @return IRequestOperation实例
		 * 
		 */		
		public function htTimeline(httext:String,pageflag:int=0,pageinfo:String="",reqnum:int=20):IRequestOperation
		{
			checkAccessToken();
			var url:String = config.urlBase+"statuses/ht_timeline";
			var attachParms:Object = {};
			attachParms.httext = httext;
			attachParms.pageflag = pageflag;
			attachParms.pageinfo = pageinfo;
			attachParms.reqnum = reqnum;
			return generateDataRequest(url,attachParms,config.requestMethod);
		}
		/**
		 * 6.获取我发表微博的时间线
		 * @param pageflag 分页标识（0：第一页，1：向下翻页，2向上翻页）
		 * @param pagetime 本页起始时间（第一页时填0，继续向下翻页：填上一次请求返回的最后一条记录时间）
		 * @param reqnum 每次请求记录的条数（1-100条）
		 * @param lastid 第一页时填0,继续向下翻页，填上一次请求返回的最后一条记录id，翻页用
		 * @param type 拉取类型, 0x1 原创发表 0x2 转载 0x8 回复 0x10 空回 0x20 提及 0x40 点评 如需拉取多个类型请|上(0x1|0x2) 得到3，type=3即可,填零表示拉取所有类型
		 * @param contenttype 内容过滤 填零表示所有类型 1-带文本2-带链接4图片8-带视频0x10-带音频
		 * @return IRequestOperation实例
		 * 
		 */		
		public function broadcastTimeline(pageflag:int=0,pagetime:int=0,reqnum:int=20,lastid:String="0",type:int=0,contenttype:int=0):IRequestOperation
		{
			checkAccessToken();
			var url:String = config.urlBase+"statuses/broadcast_timeline";
			var attachParms:Object = {};
			attachParms.pageflag = pageflag;
			attachParms.pagetime = pagetime;
			attachParms.reqnum = reqnum;
			attachParms.lastid = lastid;
			attachParms.type = type;
			attachParms.contenttype = contenttype;
			return generateDataRequest(url,attachParms,config.requestMethod);
		}
		/**
		 * 7.特别收听的人发表时间线
		 * @param pageflag 分页标识（0：第一页，1：向下翻页，2向上翻页）
		 * @param pagetime 本页起始时间（第一页时填0，继续向下翻页：填上一次请求返回的最后一条记录时间）
		 * @param reqnum 每次请求记录的条数（1-100条）
		 * @param lastid 用于翻页，和pagetime配合使用（第一页：填0，向上翻页：填上一次请求返回的第一条记录id，向下翻页：填上一次请求返回的最后一条记录id）
		 * @param type 拉取类型, 0x1 原创发表 0x2 转载 0x8 回复 0x10 空回 0x20 提及 0x40 点评 如需拉取多个类型请|上(0x1|0x2) 得到3，type=3即可,填零表示拉取所有类型
		 * @param contenttype 内容过滤 填零表示所有类型 1-带文本2-带链接4图片8-带视频0x10-带音频
		 * @return IRequestOperation实例
		 * 
		 */		
		public function specialTimeline(pageflag:int=0,pagetime:int=0,reqnum:int=20,lastid:String="0",type:int=0,contenttype:int=0):IRequestOperation
		{
			checkAccessToken();
			var url:String = config.urlBase+"statuses/special_timeline";
			var attachParms:Object = {};
			attachParms.pageflag = pageflag;
			attachParms.pagetime = pagetime;
			attachParms.reqnum = reqnum;
			attachParms.lastid = lastid;
			attachParms.type = type;
			attachParms.contenttype = contenttype;
			return generateDataRequest(url,attachParms,config.requestMethod);
		}
		/**
		 * 8.获取地区发表时间线
		 * @param country 国家码
		 * @param province 省份码
		 * @param city 城市码
		 * @param pos 记录的起始位置（第一次请求是填0，继续请求进填上次返回的pos）
		 * @param reqnum 每次请求记录的条数（1-100条）
		 * @return IRequestOperation实例
		 * 
		 */		
		public function areaTimeline(country:String,province:String,city:String,pos:int=0,reqnum:int=20):IRequestOperation
		{
			checkAccessToken();
			var url:String = config.urlBase+"statuses/area_timeline";
			var attachParms:Object = {};
			attachParms.country = country;
			attachParms.province = province;
			attachParms.city = city;
			attachParms.pos = pos;
			attachParms.reqnum = reqnum;
			return generateDataRequest(url,attachParms,config.requestMethod);
		}
		/**
		 * 9.获取主页时间线索引
		 * @param pageflag 分页标识（0：第一页，1：向下翻页，2向上翻页）
		 * @param pagetime 本页起始时间（第一页时填0，继续向下翻页：填上一次请求返回的最后一条记录时间）
		 * @param reqnum 每次请求记录的条数（1-100条）
		 * @param type 拉取类型, 0x1 原创发表 0x2 转载 0x8 回复 0x10 空回 0x20 提及 0x40 点评 如需拉取多个类型请|上(0x1|0x2) 得到3，type=3即可,填零表示拉取所有类型
		 * @param contenttype 内容过滤 填零表示所有类型 1-带文本2-带链接4图片8-带视频0x10-带音频
		 * @return IRequestOperation实例
		 * 
		 */	
		public function homeTimelineIds(pageflag:int=0,pagetime:int=0,reqnum:int=20,type:int=0,contenttype:int=0):IRequestOperation
		{
			checkAccessToken();
			var url:String = config.urlBase+"statuses/home_timeline_ids";
			var attachParms:Object = {};
			attachParms.pageflag = pageflag;
			attachParms.pagetime = pagetime;
			attachParms.reqnum = reqnum;
			attachParms.type = type;
			attachParms.contenttype = contenttype;
			return generateDataRequest(url,attachParms,config.requestMethod);
		}
		/**
		 * 10.其他用户发表时间线索引
		 * @param name 你需要读取该用户的用户名（可选）
		 * @param fopenid 你需要读取的用户的openid（可选）name和fopenid至少选一个，若同时存在则以name值为主
		 * @param pageflag 分页标识（0：第一页，1：向下翻页，2向上翻页）
		 * @param pagetime 本页起始时间（第一页时填0，继续翻页：填上一次请求返回的最后一条记录时间)
		 * @param reqnum 每次请求记录的条数（1-100条）
		 * @param lastid 第一页时填0,继续向下翻页，填上一次请求返回的最后一条记录id，翻页用
		 * @param type 拉取类型, 0x1 原创发表 0x2 转载 0x8 回复 0x10 空回 0x20 提及 0x40 点评 如需拉取多个类型请|上(0x1|0x2) 得到3，type=3即可,填零表示拉取所有类型
		 * @param contenttype 内容过滤 填零表示所有类型 1-带文本2-带链接4图片8-带视频0x10-带音频
		 * @return IRequestOperation实例
		 * 
		 */
		public function userTimelineIds(name:String=null, fopenid:String=null, pageflag:int=0, pagetime:int=0, reqnum:int=20, lastid:String="0", type:int=0, contenttype:int=0):IRequestOperation
		{
			checkAccessToken();
			var url:String=config.urlBase + "statuses/user_timeline_ids";
			var attachParms:Object={};
			if(name != null)
				attachParms.name=name;
			if(fopenid != null)
				attachParms.fopenid=fopenid;
			attachParms.pageflag=pageflag;
			attachParms.pagetime=pagetime;
			attachParms.reqnum=reqnum;
			attachParms.lastid=lastid;
			attachParms.type=type;
			attachParms.contenttype=contenttype;
			return generateDataRequest(url, attachParms, config.requestMethod);
		}
		/**
		 * 11.我发表时间线索引
		 * @param pageflag 分页标识（0：第一页，1：向下翻页，2向上翻页）
		 * @param pagetime 本页起始时间（第一页时填0，继续翻页：填上一次请求返回的最后一条记录时间)
		 * @param reqnum 每次请求记录的条数（1-100条）
		 * @param lastid 第一页时填0,继续向下翻页，填上一次请求返回的最后一条记录id，翻页用
		 * @param type 拉取类型, 0x1 原创发表 0x2 转载 0x8 回复 0x10 空回 0x20 提及 0x40 点评 如需拉取多个类型请|上(0x1|0x2) 得到3，type=3即可,填零表示拉取所有类型
		 * @param contenttype 内容过滤 填零表示所有类型 1-带文本2-带链接4图片8-带视频0x10-带音频
		 * @return IRequestOperation实例
		 * 
		 */
		public function broadcastTimelineIds(pageflag:int=0, pagetime:int=0, reqnum:int=20, lastid:String="0", type:int=0, contenttype:int=0):IRequestOperation
		{
			checkAccessToken();
			var url:String=config.urlBase + "statuses/broadcast_timeline_ids";
			var attachParms:Object={};
			attachParms.pageflag=pageflag;
			attachParms.pagetime=pagetime;
			attachParms.reqnum=reqnum;
			attachParms.lastid=lastid;
			attachParms.type=type;
			attachParms.contenttype=contenttype;
			return generateDataRequest(url, attachParms, config.requestMethod);
		}
		/**
		 * 12.用户提及时间线索引
		 * @param pageflag 分页标识（0：第一页，1：向下翻页，2向上翻页）
		 * @param pagetime 本页起始时间（第一页时填0，继续向下翻页：填上一次请求返回的最后一条记录时间）
		 * @param reqnum 每次请求记录的条数（1-100条）
		 * @param lastid 第一页时填0,继续向下翻页，填上一次请求返回的最后一条记录id，翻页用
		 * @param type 拉取类型, 0x1 原创发表 0x2 转载 0x8 回复 0x10 空回 0x20 提及 0x40 点评 如需拉取多个类型请|上(0x1|0x2) 得到3，type=3即可,填零表示拉取所有类型
		 * @param contenttype 内容过滤 填零表示所有类型 1-带文本2-带链接4图片8-带视频0x10-带音频
		 * @return IRequestOperation实例
		 * 
		 */		
		public function mentionsTimelineIds(pageflag:int=0,pagetime:int=0,reqnum:int=20,lastid:String="0",type:int=0,contenttype:int=0):IRequestOperation
		{
			checkAccessToken();
			var url:String = config.urlBase+"statuses/mentions_timeline_ids";
			var attachParms:Object = {};
			attachParms.pageflag = pageflag;
			attachParms.pagetime = pagetime;
			attachParms.reqnum = reqnum;
			attachParms.lastid = lastid;
			attachParms.type = type;
			attachParms.contenttype = contenttype;
			return generateDataRequest(url,attachParms,config.requestMethod);
		}
		/**
		 * 13.多用户发表时间线
		 * @param names 你需要读取用户列表用“,”隔开，例如：abc,bcde,effg（可选）
		 * @param fopenids 你需要读取的用户openid列表，用下划线“_”隔开（可选）names和fopenids至少选一个，若同时存在则以names值为主
		 * @param pageflag 分页标识（0：第一页，1：向下翻页，2向上翻页）
		 * @param pagetime 本页起始时间（第一页时填0，继续向下翻页：填上一次请求返回的最后一条记录时间）
		 * @param reqnum 每次请求记录的条数（1-100条）
		 * @param lastid 第一页时填0,继续向下翻页，填上一次请求返回的最后一条记录id，翻页用
		 * @param type 拉取类型, 0x1 原创发表 0x2 转载 0x8 回复 0x10 空回 0x20 提及 0x40 点评 如需拉取多个类型请|上(0x1|0x2) 得到3，type=3即可,填零表示拉取所有类型
		 * @param contenttype 内容过滤 填零表示所有类型 1-带文本2-带链接4图片8-带视频0x10-带音频
		 * @return IRequestOperation实例
		 * 
		 */		
		public function usersTimeline(names:String=null,fopenids:String=null,pageflag:int=0,pagetime:int=0,reqnum:int=20,lastid:String="0",type:int=0,contenttype:int=0):IRequestOperation
		{
			checkAccessToken();
			var url:String = config.urlBase+"statuses/users_timeline";
			var attachParms:Object = {};
			if(names != null)
				attachParms.names = names;
			if(fopenids != null)
				attachParms.fopenids = fopenids;
			attachParms.pageflag = pageflag;
			attachParms.pagetime = pagetime;
			attachParms.reqnum = reqnum;
			attachParms.lastid = lastid;
			attachParms.type = type;
			attachParms.contenttype = contenttype;
			return generateDataRequest(url,attachParms,config.requestMethod);
		}
		/**
		 * 14.多用户发表时间线索引
		 * @param names 你需要读取用户列表用“,”隔开，例如：abc,bcde,effg（可选）
		 * @param fopenids 你需要读取的用户openid列表，用下划线“_”隔开（可选）names和fopenids至少选一个，若同时存在则以names值为主
		 * @param pageflag 分页标识（0：第一页，1：向下翻页，2向上翻页）
		 * @param pagetime 本页起始时间（第一页时填0，继续向下翻页：填上一次请求返回的最后一条记录时间）
		 * @param reqnum 每次请求记录的条数（1-100条）
		 * @param lastid 第一页时填0,继续向下翻页，填上一次请求返回的最后一条记录id，翻页用
		 * @param type 拉取类型, 0x1 原创发表 0x2 转载 0x8 回复 0x10 空回 0x20 提及 0x40 点评 如需拉取多个类型请|上(0x1|0x2) 得到3，type=3即可,填零表示拉取所有类型
		 * @param contenttype 内容过滤 填零表示所有类型 1-带文本2-带链接4图片8-带视频0x10-带音频
		 * @return IRequestOperation实例
		 * 
		 */		
		public function usersTimelineIds(names:String=null,fopenids:String=null,pageflag:int=0,pagetime:int=0,reqnum:int=20,lastid:String="0",type:int=0,contenttype:int=0):IRequestOperation
		{
			checkAccessToken();
			var url:String = config.urlBase+"statuses/users_timeline_ids";
			var attachParms:Object = {};
			if(names != null)
				attachParms.names = names;
			if(fopenids != null)
				attachParms.fopenids = fopenids;
			attachParms.pageflag = pageflag;
			attachParms.pagetime = pagetime;
			attachParms.reqnum = reqnum;
			attachParms.lastid = lastid;
			attachParms.type = type;
			attachParms.contenttype = contenttype;
			return generateDataRequest(url,attachParms,config.requestMethod);
		}
		/**
		 * 15.话题时间线(新)
		 * @param httext 话题内容，长度有限制。
		 * @param htid 话题ID（可以通过ht/ids获取指定话题的ID） htid和httext这两个参数不能同时填写，如果都填写只拉取htid指定的微博，如果要拉取指定话题的微博，请务必让htid为0
		 * @param reqnum 请求数量（1-100）
		 * @param tweetid 微博帖子ID（详细用法见pageflag）
		 * @param time 微博帖子生成时间（详细用法见pageflag）
		 * @param pageflag 翻页标识(第一次务必填零) pageflag=1表示向下翻页：tweetid和time是上一页的最后一个帖子ID和时间；  pageflag=2表示向上翻页：tweetid和time是下一页的第一个帖子ID和时间；
		 * @param flag 是否拉取认证用户，用作筛选。0-拉取所有用户，0x01-拉取认证用户
		 * @param type 1-原创发表，2-转载，3-私信，4-回复，5-空回，6-提及，7-点评
		 * @param contenttype 正文类型（按位使用）。1-带文本(这一位一定有)，2-带链接，4-带图片，8-带视频，0x10-带音频
		 * @return IRequestOperation
		 * 
		 */		
		public function htTimelineExt(httext:String,htid:String="0",reqnum:int=20,tweetid:String="0",time:String="0",pageflag:int=0,flag:int=0,type:int=0,contenttype:int=0):IRequestOperation
		{
			checkAccessToken();
			var url:String = config.urlBase+"statuses/ht_timeline_ext";
			var attachParms:Object = {};
			attachParms.httext = httext;
			attachParms.htid = htid;
			attachParms.reqnum = reqnum;
			attachParms.tweetid = tweetid;
			attachParms.time = time;
			attachParms.pageflag = pageflag;
			attachParms.flag = flag;
			attachParms.type = type;
			attachParms.contenttype = contenttype;
			return generateDataRequest(url,attachParms,config.requestMethod);
		}
		/**
		 * 16.拉取vip用户发表微博消息接口
		 * @param pageflag 分页标识（0：第一页，1：向下翻页，2：向上翻页）
		 * @param pagetime 本页起始时间（第一页：填0，向上翻页：填上一次请求返回的第一条记录时间，向下翻页：填上一次请求返回的最后一条记录时间）
		 * @param reqnum 每次请求记录的条数（1-70条）
		 * @param lastid 用于翻页，和pagetime配合使用（第一页：填0，向上翻页：填上一次请求返回的第一条记录id，向下翻页：填上一次请求返回的最后一条记录id）如果用户不指定该参数，默认为0
		 * @return IRequestOperation
		 * 
		 */		
		public function homeTimelineVip(pageflag:int=0,pagetime:String="0",reqnum:int=20,lastid:String="0"):IRequestOperation
		{
			checkAccessToken();
			var url:String = config.urlBase+"statuses/home_timeline_vip";
			var attachParms:Object = {};
			attachParms.pageflag = pageflag;
			attachParms.pagetime = pagetime;
			attachParms.reqnum = reqnum;
			attachParms.lastid = lastid;
			return generateDataRequest(url,attachParms,config.requestMethod);
		}
		/**
		 * 17.获取二传手列表
		 * @param reqnum 每次请求记录的条数（1-50条）
		 * @param rootid 二传手转发或者回复查询节点的父亲结点id
		 * @param type 1-转发，2-点评
		 * @param pageflag 分页标识（0：第一页，1：向下翻页，2：向上翻页）
		 * @param pagetime 本页起始时间（第一页：填0，向上翻页：填上一次请求返回的第一条记录时间，向下翻页：填上一次请求返回的最后一条记录时间）
		 * @param lastid 和pagetime配合使用（第一页：填0，向上翻页：填上一次请求返回的第一条记录id，向下翻页：填上一次请求返回的最后一条记录id
		 * @return IRequestOperation
		 * 
		 */		
		public function subReList(reqnum:int=20,rootid:String="0",type:int=1,pageflag:int=0,pagetime:String="0",lastid:String="0"):IRequestOperation
		{
			checkAccessToken();
			var url:String = config.urlBase+"statuses/sub_re_list";
			var attachParms:Object = {};
			attachParms.reqnum = reqnum;
			attachParms.rootid = rootid;
			attachParms.type = type;
			attachParms.pageflag = pageflag;
			attachParms.pagetime = pagetime;
			attachParms.lastid = lastid;
			return generateDataRequest(url,attachParms,config.requestMethod);
		}
	}
}
